#!/sbin/sh
#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License (the "License").
# You may not use this file except in compliance with the License.
#
# See LICENSE.txt included in this distribution for the specific
# language governing permissions and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#
# Copyright 2010 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#

PATH="/usr/bin:/bin"

getprop() {
	svcprop -p opengrok/$1 opengrok | tr -d '\\' | (
		read value
		if [ "x$value" != 'x""' ]; then
			printf "%s" "$value"
		fi
	)
}

read_config() {
	SRCDIR=`getprop srcdir`

	if [ ! -d "$SRCDIR" ]; then
	   echo "FATAL: srcdir $SRCDIR doesn't exist" >&2
	   exit $SMF_EXIT_ERR_CONFIG
	fi

	JAVA_OPTS="-Xmx`getprop maxmemory`m"
	JAVA_EXTRA_PARAMS=`getprop java_extra_params`
	DATADIR=`getprop cachedir`
	OG_DEF_PARAMS=`getprop default_params`
	OG_EXTRA_PARAMS=`getprop extra_params`
	READONLY_CFG_FILE=`getprop readonly_config`
	READ_XML_CONF=""
	VERBOSE=""
	if [ "`getprop verbose`" != "false" ]; then
		VERBOSE="-v"
	fi

	if [ -r "$READONLY_CFG_FILE" ]; then
		READ_XML_CONF="-R $READONLY_CFG_FILE"
	fi
}

JAVA=/usr/jdk/latest/bin/java
LIBDIR=/usr/opengrok/lib
LOCALSTATEDIR="/var/opengrok"
WEBAPP_CONFIG_ADDRESS="-U localhost:2424"
XML_CONFIGURATION="$LOCALSTATEDIR/etc/configuration.xml"
CLASSPATH=$LIBDIR/opengrok.jar

xx() {
	echo "$@"
	"$@"
}

runjava() {
	xx ${JAVA} ${JAVA_OPTS} ${JAVA_EXTRA_PARAMS}		\
	-cp ${CLASSPATH}					\
	org.opensolaris.opengrok.index.Indexer			\
	${OG_DEF_PARAMS} ${OG_EXTRA_PARAMS}			\
	${READ_XML_CONF}					\
	-W ${XML_CONFIGURATION}					\
	${WEBAPP_CONFIG_ADDRESS}				\
	${VERBOSE}						\
	-s ${SRCDIR} -d ${DATADIR} "$@"
}

# Read configuration for the first time.
read_config || exit $?

pipe=/var/opengrok/.refresh.pipe
if [ ! -p "$pipe" ]; then
	mkfifo "$pipe" || exit 1
fi
if [ ! -f "$XML_CONFIGURATION" ]; then
	# This is likely our first run. Let's do the initial indexing.
	runjava -H || exit 1
fi
while read line; do
	# Re-read configuration.
	read_config || exit $?
	runjava -H || exit 1
done < "$pipe" 5> "$pipe"

